package LeetCode75;

/**
 * 605. 种花问题
 * 假设有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
 *
 * 给你一个整数数组 flowerbed 表示花坛，由若干 0 和 1 组成，其中 0 表示没种植花，1 表示种植了花。另有一个数 n ，能否在不打破种植规则的情况下种入 n 朵花？能则返回 true ，不能则返回 false 。
 *
 *
 *
 * 示例 1：
 *
 * 输入：flowerbed = [1,0,0,0,1], n = 1
 * 输出：true
 * 示例 2：
 *
 * 输入：flowerbed = [1,0,0,0,1], n = 2
 * 输出：false
 *
 *
 * 提示：
 *
 * 1 <= flowerbed.length <= 2 * 104
 * flowerbed[i] 为 0 或 1
 * flowerbed 中不存在相邻的两朵花
 * 0 <= n <= flowerbed.length
 */
public class T0605_种花问题 {

    public static boolean canPlaceFlowers(int[] flowerbed, int n) {

        if(n==0){
            return true;
        }

        //在原来的数组头尾各添加一个0 ,解决边界问题
        int[] newFlowerbed = new int[flowerbed.length+2];
        System.arraycopy(flowerbed, 0, newFlowerbed, 1, flowerbed.length);

        int left = 0;
        int current = 1;
        int right = 2;
        int count = 0;
        //连续三个0 就可以将花种下
        while (right < newFlowerbed.length) {
            //当前位置可以种植
            if (newFlowerbed[left]==0&&newFlowerbed[current]==0&&newFlowerbed[right]==0){
                count++;
                newFlowerbed[current] = 1;
            }

            left++;
            current++;
            right++;

        }
        return count>=n;
    }

    public static void main(String[] args) {

        canPlaceFlowers(new int[]{1,0,0,0,1,0,0},2);

    }


}
